home *** CD-ROM | disk | FTP | other *** search
- {$I-}
- program zdisk;
- uses dos,crt,strnglib;
- label
- finish;
- const
- debug = false;
- bufsize = 32768;
- smblk = 512;
- titleline = 2;
- blkszline = 3;
- statsline = 4;
- msgline = 5;
- finishline= 10;
- version = '3.1';
- type
- strng80 = string[80];
- var
- buffer : array[1..bufsize] of byte;
- file0,
- file1 : file;
- blktitle : string[20];
- fname : strng80;
- status : byte;
-
- function checkio(errmsg : strng80) : boolean;
- var
- iores : integer;
- begin { checkio }
- iores := ioresult;
- if iores <> 0
- then begin
- writeln('IO Err # ',iores,'. ',errmsg);
- checkio := true;
- end
- else begin
- if debug
- then begin
- writeln(errmsg,' -- OK.');
- end;
- checkio := false;
- end;
- end; { checkio }
-
- function zerofile(var outfile : file; fn : strng80; bufsizeused : word)
- : boolean;
- var
- can,
- done : boolean;
- blockno : longint;
- blockswritten : integer;
- ch : char;
- signature : strng80;
- i : integer;
- begin { zerofile }
- gotoxy(1,blkszline);
- clreol;
- writeln('Writing in blocks of ',bufsizeused,' bytes to file ',fn);
- gotoxy(1,statsline);
- clreol;
- write(blktitle);
- zerofile := false; { not cancelled by operator }
- { Create buffer to write to disk }
- signature := 'ZDisk '+ version + ' was here.';
- fillchar(buffer,sizeof(buffer),0);
- for i := 1 to length(signature) do
- buffer[i] := ord(signature[i]);
- { open temporary output file }
- assign(outfile,fn);
- if checkio('assigning '+fn+' to temporary output file.')
- then begin
- zerofile := true;
- exit;
- end;
- rewrite(outfile,bufsizeused);
- if checkio('opening '+fn+'.')
- then begin
- zerofile := true;
- exit;
- end;
- done := false;
- blockno := 0;
- ch := 'N'; { indicate no operator cancel }
- repeat
- blockwrite(outfile,buffer,1,blockswritten);
- blockno := blockno + blockswritten;
- if keypressed
- then begin
- { get rid of key which caused interruption }
- ch := readkey;
- if ch = #0
- then ch := readkey;
- gotoxy(1,msgline);
- clreol;
- write('Cancel ZDisk ? ');
- ch := upcase(readkey);
- write(ch);
- gotoxy(1,msgline);
- clreol;
- done := ch = 'Y';
- if done
- then write('ZDisk cancelled by operator.')
- else begin
- write('Press any key to cancel.');
- ch := 'N';
- end;
- zerofile := done;
- end
- else done := blockswritten = 0;
- gotoxy(1+length(blktitle),statsline);
- write(blockno:7);
- until (done);
- close(outfile);
- end; { zerofile }
-
- begin { zdisk }
- if ParamCount > 0
- then begin
- fname := upcas(trim(Paramstr(1)));
- if fname[1] in ['A'..'Z']
- then fname := fname + ':\$Z$E$R$0.TMP'
- else begin
- writeln('ZDisk Version ',version,
- ' Error -- Illegal Drive Parameter.');
- halt(3);
- end;
- end
- else fname := FExpand('\$Z$E$R$0.TMP');
-
- blktitle := 'Block No.: ';
- status := 0; { Normal Termination }
- clrscr;
- gotoxy(1,titleline);
- writeln('ZDisk ',version,
- ' -- Overwrite unused sectors with binary zeroes.');
- gotoxy(1,msgline);
- clreol;
- writeln('Press any key to cancel');
- if zerofile(file0,fname,bufsize)
- then begin
- status := 1;
- goto finish;
- end;
- fname[length(fname)-4] := '1';
- if zerofile(file1,fname,smblk)
- then status := 2;
- finish:
- gotoxy(1,finishline);
- clreol;
- erase(file0);
- erase(file1);
- halt(status);
- end. { zdisk }